import isEmpty from 'lodash/isEmpty'
import trim from 'lodash/trim'
import { Toast } from 'vant'
import { translateTitle } from '@/utils/i18n'
import { ElMessage } from 'element-plus'

//必须带done回调 执行完成调用
export default function pdaClickGetTable({ vm, action, done }) {
  let { getDataKey, tableSelect, checkbox, getLength } = action.extension
  if (tableSelect) {
    // console.log(action.extension.tableSelect)
    let tableDatas = {}
    let self = null
    // console.log(vm.vuiComponents[item])

    let _data = {}
    // 选中表格self
    if (!isEmpty(action.extension.tableSelect.value)) {
      self = vm.vuiComponents[action.extension.tableSelect.value[0]]?.self
      let activeData = ''
      // 表格选中数据activeData
      // console.log('表格选中的数据', self.allData, self.tdData)
      // 获取多选值
      console.log('单机获取表格值', action.extension)
      if (checkbox && checkbox.value) {
        activeData = self.allData
      } else {
        // 获取单选选中的值
        activeData = self.tdData[self.aIndex]
      }
      if (!isEmpty(activeData)) {
        _data = activeData

        if (getLength && getLength.value) {
          // 获取数据长度
          console.log('获取数据长度', activeData.length, checkbox)
          if (checkbox.value) {
            tableDatas = {
              tableLength: activeData.length,
            }
          } else {
            ElMessage({
              showClose: true,
              message: translateTitle('Pda.elements.获取数据长度提示'),
              type: 'error',
            })
          }
        } else {
          if (!isEmpty(getDataKey.value)) {
            // 表格选中数据字段
            const getDataKeyList = getDataKey.value.split(',')
            let _dataObj = {}
            let _dataArr = []

            if (checkbox && checkbox.value) {
              // 多选有固定的key 返回固定key对应的值
              const result = activeData.reduce((acc, cur) => {
                // 累加数据
                getDataKeyList.forEach((v) => {
                  acc[v] += cur[v] + ','
                })
                return acc
              }, Object.fromEntries(getDataKeyList.map((key) => [key, ''])))
              // 删除最后一个逗号
              getDataKeyList.forEach((v) => {
                result[v] = result[v].slice(0, -1)
              })
              _dataArr = result
            } else {
              // 获取单选选中的值
              getDataKeyList.map((item) => {
                item = trim(item)
                // 获取单选选中的值
                _dataObj[item] = _data[item] || ''
              })
            }
            tableDatas = checkbox && checkbox.value ? _dataArr : _dataObj
          } else {
            if (checkbox && checkbox.value) {
              // 多选没有固定key 返回所有key对应的字符串
              const result = {}
              activeData.forEach((obj) => {
                for (const key in obj) {
                  if (Object.prototype.hasOwnProperty.call(obj, key)) {
                    if (Object.prototype.hasOwnProperty.call(result, key)) {
                      result[key] += obj[key] + ','
                    } else {
                      result[key] = obj[key] + ','
                    }
                  }
                }
              })
              // 删除最后一个逗号
              Object.keys(activeData[0]).forEach((v) => {
                result[v] = result[v].slice(0, -1)
              })
              tableDatas = result
              console.log('获取拿到的值2', result)
            } else {
              // 获取单选选中的值
              tableDatas = activeData
            }
          }
        }
        console.log('获取拿到的值', tableDatas)
        // 存储动作数据
        vm.$store.dispatch('actionDatas/setActionsData', {
          moduleId: vm.info._id,
          actionId: action._id,
          actionData: tableDatas,
        })
        done(null, tableDatas)
      } else {
        Toast(translateTitle('Pda.elements.请选择表格数据'))
        //   // 修改任务队列执行状态，防止下一次事件被拦截
        vm.onClickIsRunning = false
      }
    } else {
      Toast(translateTitle('Pda.elements.请在配置中选择表格提示'))
      //   // 修改任务队列执行状态，防止下一次事件被拦截
      vm.onClickIsRunning = false
    }
    // if (self) {

    // } else {
    //   ElMessage({
    //     showClose: true,
    //     message: '获取表单值 - 请选择表单组件！',
    //     type: 'error',
    //   })

    // }
  } else {
    // 存储动作数据
    vm.$store.dispatch('actionDatas/setActionsData', {
      moduleId: vm.info._id,
      actionId: action._id,
      actionData: {},
    })
    done(null, {})
  }
}
